package com.speedchina.permission.service.sys;

import com.speedchina.framework.base.IService;
import com.speedchina.permission.domain.sys.entity.Role;
import com.speedchina.permission.domain.sys.entity.User;
import com.speedchina.permission.domain.sys.po.RolePo;

import java.io.Serializable;
import java.util.List;
import java.util.Set;

/**
 * 系统-角色表 服务层接口
 * @author han.qing
 * @date 2021-04-08 12:17:35
 */
public interface RoleService extends IService<Role> {
    /**
     * 新增角色 关联管理 角色-资源 关系
     * 要求 roleKey 唯一（数据库约束）
     * @param rolePo
     * @return
     */
    boolean save(RolePo rolePo);

    /**
     * 修改角色，处理角色-资源关系
     * 规则：roleKey 不参与更新
     *      取 用户-资源关系 判断是否修改，若修改则 先清除 关系，再重写维护关系即可
     * @param rolePo
     * @return
     */
    boolean update(RolePo rolePo);

    /**
     * 删除角色和资源关联关系
     * @param ids
     * @return
     */
    boolean deleteRolesAndLinked(List<Serializable> ids);

    /**
     * 查询用户拥有的角色
     * @param user
     * @return
     */
    Set<String> queryUserRoles(User user);

    List<Role> findByUserId(User user);
}
